தமிழ்

பொருள் சார்ந்த நிரலாக்கத்தின் (object-oriented programming) அடிப்படைக் கருத்தான பல்வகைமையை ஆராயுங்கள். உலகளாவிய டெவலப்பர்களுக்கான நடைமுறை எடுத்துக்காட்டுகளுடன், இது குறியீட்டின் நெகிழ்வுத்தன்மை, மறுபயன்பாடு மற்றும் பராமரிப்பை எவ்வாறு மேம்படுத்துகிறது என்பதை அறியுங்கள்.

Loading...

பல்வகைமையை (Polymorphism) புரிந்துகொள்ளுதல்: உலகளாவிய டெவலப்பர்களுக்கான ஒரு விரிவான வழிகாட்டி

கிரேக்க வார்த்தைகளான "poly" (பொருள் "பல") மற்றும் "morph" (பொருள் "வடிவம்") ஆகியவற்றிலிருந்து பெறப்பட்ட பல்வகைமை (Polymorphism), பொருள் சார்ந்த நிரலாக்கத்தின் (OOP) ஒரு மூலக்கல்லாகும். இது வெவ்வேறு வகுப்புகளின் பொருள்கள் ஒரே மெத்தட் அழைப்பிற்கு தங்களின் சொந்த குறிப்பிட்ட வழிகளில் பதிலளிக்க அனுமதிக்கிறது. இந்த அடிப்படைக் கருத்து குறியீட்டின் நெகிழ்வுத்தன்மை, மறுபயன்பாடு மற்றும் பராமரிப்புத்தன்மையை மேம்படுத்துகிறது, இது உலகெங்கிலும் உள்ள டெவலப்பர்களுக்கு ஒரு இன்றியமையாத கருவியாக அமைகிறது. இந்த வழிகாட்டி பல்வகைமை, அதன் வகைகள், நன்மைகள் மற்றும் பல்வேறு நிரலாக்க மொழிகள் மற்றும் மேம்பாட்டு சூழல்களில் பொருந்தக்கூடிய எடுத்துக்காட்டுகளுடன் அதன் நடைமுறைப் பயன்பாடுகள் பற்றிய விரிவான கண்ணோட்டத்தை வழங்குகிறது.

பல்வகைமை என்றால் என்ன?

அதன் மையத்தில், பல்வகைமை ஒரு ஒற்றை இடைமுகத்தை பல வகைகளைக் குறிக்க உதவுகிறது. இதன் பொருள், வெவ்வேறு வகுப்புகளின் பொருள்களில் செயல்படும் குறியீட்டை, அவை ஒரு பொதுவான வகையின் பொருள்கள் போல எழுத முடியும். இயக்கப்படும் உண்மையான நடத்தை, இயக்க நேரத்தில் (runtime) குறிப்பிட்ட பொருளைப் பொறுத்தது. இந்த டைனமிக் நடத்தைதான் பல்வகைமையை மிகவும் சக்தி வாய்ந்ததாக ஆக்குகிறது.

ஒரு எளிய ஒப்பீட்டைக் கவனியுங்கள்: உங்களிடம் "play" பொத்தான் கொண்ட ரிமோட் கண்ட்ரோல் இருப்பதாக கற்பனை செய்து பாருங்கள். இந்தப் பொத்தான் டிவிடி பிளேயர், ஸ்ட்ரீமிங் சாதனம், சிடி பிளேயர் போன்ற பல்வேறு சாதனங்களில் வேலை செய்கிறது. ஒவ்வொரு சாதனமும் "play" பொத்தானுக்கு அதன் சொந்த வழியில் பதிலளிக்கிறது, ஆனால் பொத்தானை அழுத்தினால் பின்னணி தொடங்கும் என்பதை மட்டும் நீங்கள் அறிந்தால் போதும். "play" பொத்தான் ஒரு பல்வகைமை இடைமுகம், மற்றும் ஒவ்வொரு சாதனமும் ஒரே செயலுக்கு வெவ்வேறு நடத்தையை (வடிவங்களை) வெளிப்படுத்துகிறது.

பல்வகைமையின் வகைகள்

பல்வகைமை இரண்டு முதன்மை வடிவங்களில் வெளிப்படுகிறது:

1. கம்பைல்-நேர பல்வகைமை (நிலையான பல்வகைமை அல்லது ஓவர்லோடிங்)

கம்பைல்-நேர பல்வகைமை, நிலையான பல்வகைமை அல்லது ஓவர்லோடிங் என்றும் அழைக்கப்படுகிறது, இது தொகுக்கும் கட்டத்தில் (compilation phase) தீர்க்கப்படுகிறது. ஒரே வகுப்பிற்குள் ஒரே பெயரில் ஆனால் வெவ்வேறு கையொப்பங்களுடன் (அதாவது, அளவுருக்களின் வெவ்வேறு எண்ணிக்கை, வகைகள் அல்லது வரிசை) பல மெத்தட்களைக் கொண்டிருப்பதை இது உள்ளடக்குகிறது. ஃபங்ஷன் அழைப்பின் போது வழங்கப்படும் ஆர்கியுமெண்ட்களின் அடிப்படையில் எந்த மெத்தடை அழைக்க வேண்டும் என்பதை கம்பைலர் தீர்மானிக்கிறது.

எடுத்துக்காட்டு (ஜாவா):


class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    int add(int a, int b, int c) {
        return a + b + c;
    }

    double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(2, 3));       // Output: 5
        System.out.println(calc.add(2, 3, 4));    // Output: 9
        System.out.println(calc.add(2.5, 3.5));   // Output: 6.0
    }
}

இந்த எடுத்துக்காட்டில், Calculator வகுப்பில் add என்ற பெயரில் மூன்று மெத்தட்கள் உள்ளன, ஒவ்வொன்றும் வெவ்வேறு அளவுருக்களை எடுத்துக்கொள்கின்றன. அனுப்பப்பட்ட ஆர்கியுமெண்ட்களின் எண்ணிக்கை மற்றும் வகைகளின் அடிப்படையில் பொருத்தமான add மெத்தடை கம்பைலர் தேர்ந்தெடுக்கிறது.

கம்பைல்-நேர பல்வகைமையின் நன்மைகள்:

2. ரன்-டைம் பல்வகைமை (டைனமிக் பல்வகைமை அல்லது ஓவர்ரைடிங்)

ரன்-டைம் பல்வகைமை, டைனமிக் பல்வகைமை அல்லது ஓவர்ரைடிங் என்றும் அழைக்கப்படுகிறது, இது இயங்கும் கட்டத்தில் (execution phase) தீர்க்கப்படுகிறது. இது ஒரு சூப்பர் கிளாஸில் ஒரு மெத்தடை வரையறுத்து, பின்னர் ஒன்று அல்லது அதற்கு மேற்பட்ட சப் கிளாஸ்களில் அதே மெத்தடின் வேறுபட்ட செயலாக்கத்தை வழங்குவதை உள்ளடக்குகிறது. எந்த குறிப்பிட்ட மெத்தடை அழைக்க வேண்டும் என்பது இயக்க நேரத்தில் உண்மையான பொருளின் வகையின் அடிப்படையில் தீர்மானிக்கப்படுகிறது. இது பொதுவாக மரபுரிமை (inheritance) மற்றும் மெய்நிகர் செயல்பாடுகள் (virtual functions) (C++ போன்ற மொழிகளில்) அல்லது இடைமுகங்கள் (interfaces) (Java மற்றும் C# போன்ற மொழிகளில்) மூலம் அடையப்படுகிறது.

எடுத்துக்காட்டு (பைத்தான்):


class Animal:
    def speak(self):
        print("Generic animal sound")

class Dog(Animal):
    def speak(self):
        print("Woof!")

class Cat(Animal):
    def speak(self):
        print("Meow!")

def animal_sound(animal):
    animal.speak()

animal = Animal()
dog = Dog()
cat = Cat()

animal_sound(animal)  # Output: Generic animal sound
animal_sound(dog)     # Output: Woof!
animal_sound(cat)     # Output: Meow!

இந்த எடுத்துக்காட்டில், Animal வகுப்பு ஒரு speak மெத்தடை வரையறுக்கிறது. Dog மற்றும் Cat வகுப்புகள் Animal-இலிருந்து மரபுரிமையாகப் பெறுகின்றன மற்றும் speak மெத்தடை அவற்றின் சொந்த குறிப்பிட்ட செயலாக்கங்களுடன் ஓவர்ரைடு செய்கின்றன. animal_sound செயல்பாடு பல்வகைமையை நிரூபிக்கிறது: இது Animal-இலிருந்து பெறப்பட்ட எந்த வகுப்பின் பொருள்களையும் ஏற்கலாம் மற்றும் speak மெத்தடை அழைக்கலாம், இது பொருளின் வகையின் அடிப்படையில் வெவ்வேறு நடத்தைகளை விளைவிக்கிறது.

எடுத்துக்காட்டு (C++):


#include 

class Shape {
public:
    virtual void draw() {
        std::cout << "Drawing a shape" << std::endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a circle" << std::endl;
    }
};

class Square : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a square" << std::endl;
    }
};

int main() {
    Shape* shape1 = new Shape();
    Shape* shape2 = new Circle();
    Shape* shape3 = new Square();

    shape1->draw(); // Output: Drawing a shape
    shape2->draw(); // Output: Drawing a circle
    shape3->draw(); // Output: Drawing a square

    delete shape1;
    delete shape2;
    delete shape3;

    return 0;
}

C++ இல், virtual என்ற திறவுச்சொல் ரன்-டைம் பல்வகைமையை இயக்குவதற்கு முக்கியமானது. அது இல்லாமல், பொருளின் உண்மையான வகையைப் பொருட்படுத்தாமல், பேஸ் கிளாஸின் மெத்தட் எப்போதும் அழைக்கப்படும். override திறவுச்சொல் (C++11 இல் அறிமுகப்படுத்தப்பட்டது) ஒரு பெறப்பட்ட வகுப்பு மெத்தட், பேஸ் கிளாஸில் உள்ள ஒரு மெய்நிகர் செயல்பாட்டை ஓவர்ரைடு செய்ய ಉದ್ದೇಶಿಸಲಾಗಿದೆ என்பதை வெளிப்படையாகக் குறிக்கப் பயன்படுகிறது.

ரன்-டைம் பல்வகைமையின் நன்மைகள்:

இடைமுகப்புகள் (Interfaces) மூலம் பல்வகைமை

இடைமுகப்புகள் பல்வகைமையை அடைவதற்கான மற்றொரு சக்திவாய்ந்த வழிமுறையை வழங்குகின்றன. ஒரு இடைமுகம், வகுப்புகள் செயல்படுத்தக்கூடிய ஒரு ஒப்பந்தத்தை வரையறுக்கிறது. ஒரே இடைமுகத்தை செயல்படுத்தும் வகுப்புகள், அந்த இடைமுகத்தில் வரையறுக்கப்பட்ட மெத்தட்களுக்கான செயலாக்கங்களை வழங்குவது உறுதி செய்யப்படுகிறது. இது வெவ்வேறு வகுப்புகளின் பொருள்களை இடைமுக வகையின் பொருள்கள் போலக் கருத உங்களை அனுமதிக்கிறது.

எடுத்துக்காட்டு (C#):


using System;

interface ISpeakable {
    void Speak();
}

class Dog : ISpeakable {
    public void Speak() {
        Console.WriteLine("Woof!");
    }
}

class Cat : ISpeakable {
    public void Speak() {
        Console.WriteLine("Meow!");
    }
}

class Example {
    public static void Main(string[] args) {
        ISpeakable[] animals = { new Dog(), new Cat() };
        foreach (ISpeakable animal in animals) {
            animal.Speak();
        }
    }
}

இந்த எடுத்துக்காட்டில், ISpeakable இடைமுகம் Speak என்ற ஒற்றை மெத்தடை வரையறுக்கிறது. Dog மற்றும் Cat வகுப்புகள் ISpeakable இடைமுகத்தை செயல்படுத்தி, Speak மெத்தடின் சொந்த செயலாக்கங்களை வழங்குகின்றன. animals வரிசை Dog மற்றும் Cat இரண்டின் பொருள்களையும் வைத்திருக்க முடியும், ஏனெனில் அவை இரண்டும் ISpeakable இடைமுகத்தை செயல்படுத்துகின்றன. இது வரிசையின் வழியாகச் சென்று ஒவ்வொரு பொருளிலும் Speak மெத்தடை அழைக்க உங்களை அனுமதிக்கிறது, இது பொருளின் வகையின் அடிப்படையில் வெவ்வேறு நடத்தைகளை விளைவிக்கிறது.

பல்வகைமைக்கு இடைமுகப்புகளைப் பயன்படுத்துவதன் நன்மைகள்:

சுருக்க வகுப்புகள் (Abstract Classes) மூலம் பல்வகைமை

சுருக்க வகுப்புகள் நேரடியாகப் பொருள் உருவாக்க முடியாத வகுப்புகள் ஆகும். அவை உறுதியான மெத்தட்கள் (செயலாக்கங்களைக் கொண்ட மெத்தட்கள்) மற்றும் சுருக்க மெத்தட்கள் (செயலாக்கங்கள் இல்லாத மெத்தட்கள்) இரண்டையும் கொண்டிருக்கலாம். ஒரு சுருக்க வகுப்பின் துணை வகுப்புகள், சுருக்க வகுப்பில் வரையறுக்கப்பட்ட அனைத்து சுருக்க மெத்தட்களுக்கும் செயலாக்கங்களை வழங்க வேண்டும்.

சுருக்க வகுப்புகள், தொடர்புடைய வகுப்புகளின் ஒரு குழுவிற்கு ஒரு பொதுவான இடைமுகத்தை வரையறுக்க ஒரு வழியை வழங்குகின்றன, அதே நேரத்தில் ஒவ்வொரு துணை வகுப்பும் அதன் சொந்த குறிப்பிட்ட செயலாக்கத்தை வழங்க அனுமதிக்கின்றன. அவை பெரும்பாலும் சில இயல்புநிலை நடத்தைகளை வழங்கும் ஒரு அடிப்படை வகுப்பை வரையறுக்கப் பயன்படுகின்றன, அதே நேரத்தில் துணை வகுப்புகளை சில முக்கியமான மெத்தட்களை செயல்படுத்தும்படி கட்டாயப்படுத்துகின்றன.

எடுத்துக்காட்டு (ஜாவா):


abstract class Shape {
    protected String color;

    public Shape(String color) {
        this.color = color;
    }

    public abstract double getArea();

    public String getColor() {
        return color;
    }
}

class Circle extends Shape {
    private double radius;

    public Circle(String color, double radius) {
        super(color);
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

class Rectangle extends Shape {
    private double width;
    private double height;

    public Rectangle(String color, double width, double height) {
        super(color); 
        this.width = width;
        this.height = height;
    }

    @Override
    public double getArea() {
        return width * height;
    }
}

public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle("Red", 5.0);
        Shape rectangle = new Rectangle("Blue", 4.0, 6.0);

        System.out.println("Circle area: " + circle.getArea());
        System.out.println("Rectangle area: " + rectangle.getArea());
    }
}

இந்த எடுத்துக்காட்டில், Shape என்பது getArea() என்ற சுருக்க மெத்தட் கொண்ட ஒரு சுருக்க வகுப்பு. Circle மற்றும் Rectangle வகுப்புகள் Shape-ஐ நீட்டித்து getArea()-க்கு உறுதியான செயலாக்கங்களை வழங்குகின்றன. Shape வகுப்பை நேரடியாக பொருள் உருவாக்க முடியாது, ஆனால் நாம் அதன் துணை வகுப்புகளின் நிகழ்வுகளை உருவாக்கி அவற்றை Shape பொருள்களாகக் கருதலாம், பல்வகைமையைப் பயன்படுத்தலாம்.

பல்வகைமைக்கு சுருக்க வகுப்புகளைப் பயன்படுத்துவதன் நன்மைகள்:

பல்வகைமையின் நிஜ-உலக எடுத்துக்காட்டுகள்

பல்வகைமை பல்வேறு மென்பொருள் மேம்பாட்டு சூழ்நிலைகளில் பரவலாகப் பயன்படுத்தப்படுகிறது. இங்கே சில நிஜ-உலக எடுத்துக்காட்டுகள் உள்ளன:

பல்வகைமையின் நன்மைகள்

உங்கள் குறியீட்டில் பல்வகைமையை ஏற்றுக்கொள்வது பல குறிப்பிடத்தக்க நன்மைகளை வழங்குகிறது:

பல்வகைமையின் சவால்கள்

பல்வகைமை பல நன்மைகளை வழங்கினாலும், அது சில சவால்களையும் முன்வைக்கிறது:

பல்வகைமையைப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள்

பல்வகைமையை திறம்படப் பயன்படுத்தவும் அதன் சவால்களைத் தணிக்கவும், இந்த சிறந்த நடைமுறைகளைக் கருத்தில் கொள்ளுங்கள்:

முடிவுரை

பல்வகைமை என்பது பொருள் சார்ந்த நிரலாக்கத்திற்கு அவசியமான ஒரு சக்திவாய்ந்த மற்றும் பல்துறை கருத்தாகும். பல்வகைமையின் வெவ்வேறு வகைகள், அதன் நன்மைகள் மற்றும் சவால்களைப் புரிந்துகொள்வதன் மூலம், நீங்கள் அதைத் திறம்படப் பயன்படுத்தி மேலும் நெகிழ்வான, மறுபயன்பாட்டுக்குரிய மற்றும் பராமரிக்கக்கூடிய குறியீட்டை உருவாக்கலாம். நீங்கள் வலைப் பயன்பாடுகள், மொபைல் பயன்பாடுகள் அல்லது நிறுவன மென்பொருளை உருவாக்கினாலும், பல்வகைமை ஒரு மதிப்புமிக்க கருவியாகும், இது சிறந்த மென்பொருளை உருவாக்க உங்களுக்கு உதவும்.

சிறந்த நடைமுறைகளை ஏற்றுக்கொள்வதன் மூலமும், சாத்தியமான சவால்களைக் கருத்தில் கொள்வதன் மூலமும், டெவலப்பர்கள் உலகளாவிய தொழில்நுட்ப நிலப்பரப்பின் எப்போதும் மாறிவரும் கோரிக்கைகளை பூர்த்தி செய்யும் வலுவான, விரிவாக்கக்கூடிய மற்றும் பராமரிக்கக்கூடிய மென்பொருள் தீர்வுகளை உருவாக்க பல்வகைமையின் முழு திறனையும் பயன்படுத்த முடியும்.

Loading...
Loading...